package com.atguigu.mybatis.mapper;

import com.atguigu.mybatis.pojo.User;
import org.apache.ibatis.annotations.Param;

import java.util.Map;

/**
 * MyBatis获取参数值的两种方式：#{}和 ${}
 * #{} 的本质是占位符赋值，${}的本质是字符串拼接
 * 1.若mapper接口方法的参数为单个的字面量类型
 * 此时可以通过#{}和${}以任意的内容获取参数值，一直要注意${}的单引号问题
 * 2.若mapper接口方式的参数为多个字面量类型
 * 此时MyBatis会将参数放在Map集合之中，以两种方式存储数据：
 * a>以arg0，arg1...为键，以参数为值
 * b>以param1，param2...为键，以参数为值
 * 因此，只需要通过#{}和 ${}访问map集合的键，就可以获取相对应的值，一直要注意${}的单引号问题
 * 也可以混合使用，但是不推荐
 * 3.若mapper接口方法的参数为map集合类型的参数
 * 只需要通过#{}和 ${}访问map集合的键，就可以获取相对应的值，一直要注意${}的单引号问题
 * 4. 若mapper接口方法的参数为实体类类型的参数
 * 只需要通过#{}和 ${}访问实体类中的属性名，就可以获取相对应的值，一直要注意${}的单引号问题
 * 5.可以在mapper接口方法的参数上设置@param注解
 * 此时MyBatis会将这些参数放在map中，以两种方式进行存储
 * a> 以@param注解的value属性值为键，以参数为值
 * b> 以param1，param2...为键，以参数为值
 * 只需要通过#{}和 ${}访问map集合的键，就可以获取相对应的值，一直要注意${}的单引号问题
 */
public interface UserMapper {
    User getUserByUsername(String username);

    /**
     * 账号密码登录
     */
    User checkLogin(String name, String password);

    /**
     * 验证登录以Map集合作为参数
     * @param map
     * @return
     */
    User checkLoginByMap(Map<String, Object> map);

    /**
     * 添加用户信息
     * @param user
     * @return
     */
    void insertUser(User user);

    /**
     * 使用param注解，账号密码登录
     */
    User checkLoginByParam(@Param("username") String name, @Param("password") String password);
}
